package edu.grinnell.kdic.schedule; import android.app.ProgressDialog; import android.content.Context; import android.os.AsyncTask; import android.util.Log; import android.widget.Toast; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; import org.json.JSONException; import java.io.IOException; import edu.grinnell.kdic.Constants; import edu.grinnell.kdic.NetworkState; /** * Created by [pradhanp] on 10/11/15. * Gets the schedule from network location through JSON */ public class GetSchedule extends AsyncTask<Void, Void, Boolean> { private Context context; private ScheduleFragment scheduleFragment; public static final String TAG = GetSchedule.class.getSimpleName(); private ProgressDialog dialog; public GetSchedule(Context context, ScheduleFragment scheduleFragment) { this.context = context; this.scheduleFragment = scheduleFragment; } @Override protected void onPreExecute() { if (!NetworkState.isOnline(context)) { cancel(true); } else { dialog = new ProgressDialog(context); dialog.setTitle("Fetching Schedule"); dialog.setMessage("Getting the schedule"); dialog.setIndeterminate(true); dialog.setCancelable(false); dialog.show(); } super.onPreExecute(); } @Override protected Boolean doInBackground(Void... params) { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(Constants.SCHEDULE_URL) .build(); try { Response response = client.newCall(request).execute(); Schedule schedule = new Schedule(context); // Parse JSON and add it to SQLite DB schedule.updateSchedule(response.body().string()); return true; // successfully updated schedule } catch (IOException | JSONException e) { e.printStackTrace(); } return false; // failed to update schedule } @Override protected void onPostExecute(Boolean success) { dialog.dismiss(); if (success) { Log.i(TAG, "Schedule successfully parsed."); Toast.makeText(context, "Schedule updated", Toast.LENGTH_LONG).show(); scheduleFragment.getContent(); } else { // failure message Toast.makeText(context, "Failed to Update Schedule", Toast.LENGTH_LONG).show(); } super.onPostExecute(success); } @Override protected void onCancelled() { dialog.dismiss(); // No internet connection Toast.makeText(context, "There was an error fetching data.", Toast.LENGTH_LONG).show(); super.onCancelled(); } }